package com.mydomain.Bodega;

import com.mydomain.Bodega.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.framework.EntityHome;

@Name("usuarioHome")
public class UsuarioHome extends EntityHome<Usuario> {

	@In(create = true)
	TipoUsuarioHome tipoUsuarioHome;

	public void setUsuarioUsuCodigo(Integer id) {
		setId(id);
	}

	public Integer getUsuarioUsuCodigo() {
		return (Integer) getId();
	}

	@Override
	protected Usuario createInstance() {
		Usuario usuario = new Usuario();
		return usuario;
	}

	public void wire() {
		getInstance();
		TipoUsuario tipoUsuario = tipoUsuarioHome.getDefinedInstance();
		if (tipoUsuario != null) {
			getInstance().setTipoUsuario(tipoUsuario);
		}
	}

@Transactional	
public void metodoRegistroDeAuditoria(String varOperacion, String  varPantalla,String  codigo,EntityManager em){
		
		try {
			
			Subdepartamento subdepartamento = (Subdepartamento) getSessionContext()
			.get("usuarioLogeo");
			Auditoria auditoria = new Auditoria();
			auditoria.setAudPantalla(varPantalla);
			auditoria.setAudOperacion(varOperacion);
			auditoria.setAudFecha((new Date()));
			auditoria.setAudCodigoDeTabla(codigo);
			auditoria.setUsuario(subdepartamento.getUsuario());
			em.persist(auditoria);
			em.flush();
		} catch (Exception e) {
			// TODO: handle exception
		}

	}
	@Override
	@Transactional
	public String persist(){
		getEntityManager().persist(getInstance());
		getEntityManager().flush();
		metodoRegistroDeAuditoria("INSERTAR","USUARIO",String.valueOf(getInstance().getUsuCodigo()),getEntityManager());
		getFacesMessages().add("Se agrego un nuevo usuario !!!");
		return null;
	}
	
	@Override
	@Transactional
	public String remove(){
		metodoRegistroDeAuditoria("ELIMINAR","USUARIO",String.valueOf(getInstance().getUsuCodigo()),getEntityManager());
		getEntityManager().remove(getInstance());
		getEntityManager().flush();
		getFacesMessages().add("Se elimino el usuario !!!");
		return null;
	}
	@Override
	@Transactional
	public String update(){
		getEntityManager().merge(getInstance());
		getEntityManager().flush();
		metodoRegistroDeAuditoria("ACTUALIZAR","USUARIO",String.valueOf(getInstance().getUsuCodigo()),getEntityManager());
		getFacesMessages().add("Se actualizo el usuario !!!");
		return null;
	}
	public boolean isWired() {
		return true;
	}

	public Usuario getDefinedInstance() {
		return isIdDefined() ? getInstance() : null;
	}

	public List<Subdepartamento> getSubdepartamentos() {
		return getInstance() == null ? null : new ArrayList<Subdepartamento>(
				getInstance().getSubdepartamentos());
	}

}
